package LeetCodeHot100;

import java.util.List;

/**
 * 2: 两数相加
 * 给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。
 * 思路：两个链表相加，必须得考虑仅为问题，这是此题的核心
 *      除10 是 当前位， 余 10 是 进位。
 *      每一个链表节点相加， 如果每个链表都是
 */
public class LeetCode02 {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode res = new ListNode(0);
        ListNode tmp = res;
        ListNode t0 = l1;
        ListNode t1 = l2;
        // 进位
        int carray = 0;
        while (t0 != null || t1 != null || carray != 0){
            int x = t0 != null ? t0.val : 0;
            int y = t1 != null ? t1.val : 0;
            int sum = x+y+carray;
            carray = sum /10;
            ListNode next = new ListNode(sum % 10);
            tmp.next = next;
            tmp = tmp.next;
            if(t0 != null){
                t0 = t0.next;
            }
            if(t1 != null){
                t1 = t1.next;
            }
        }
        return res.next;
    }

    public class ListNode {
      int val;
      ListNode next;
      ListNode() {}
      ListNode(int val) { this.val = val; }
      ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    }
}
